let { Api } = require('/utils/api.js');
let { NetWorkUtils } = require('/utils/network_util.js');
let { Utils } = require('/utils/utils.js');
let { Storage } = require('/utils/storage.js')
let { Constants } = require('/utils/Constants.js')
let network = null;
let api = null;

App({
  onLaunch: function () {
    //baseInfo.getBaseInfo(this);
    let that = this;
    network = new this.NetWorkUtils();
    api = new this.Api();

    /**
     * 1.如果有jsCode则直接获取openId，否从回调jsCodeReadyCallback中获取jsCode
     * 2.jsCode获取成功后，将jsCode设有全局变量（见回调openIdSuccess）
     * 3.获取jsCode后，通过jsCode获取openId
     * 4.通过openId获取商户信息，并将商户信息设有全局变量（见回调userAndTenantInfoSuccess）
     * 5.获取商户用户信息后，通过商户信息获取首页信息
     * 6.获取首页信息的同时会弹出授权对话，用户同意授权，则将微信用户信息上传到我们的服务器， 同时将用户信息设为全局变量
     */
    wx.login({
      success: function (res) {
        // 获取jsCode
        let jsCode = res.code;
        if (wx.getExtConfig) {
          wx.getExtConfig({
            success: function (res) {
              wx.showLoading();
              // 获取appId
              that.globalData.appId = res.extConfig.appId;

              //获取商圈信息
              wx.request({
                url: api.getBusinessApp,
                data: { appId: that.globalData.appId },
                method: 'POST',
                success: function (res) {
                  console.log(res.data.data)
                  if (res.data.data) {
                    that.globalData.businessAppId = res.data.data.id;
                  }
                }
              })


              // 通过appId、jsCode到后台换取 openId, sessionKey, unionId
              wx.request({
                url: api.wxUrl,
                data: { appId: that.globalData.appId, jsCode: jsCode },
                success: function (res) {
                  wx.hideLoading();
                  console.log(res.data);
                  that.globalData.openId = res.data.data.openid;
                  that.globalData.sessionKey = res.data.data.session_key;
                  if (that.openIdCallback) {
                    that.openIdCallback(res.data.data.openid)
                  }

                  // 获取用户信息
                  wx.getSetting({
                    success(res) {
                      /**
                       * 1.如果弹出用户资料授权框，允许获取微信中的用户信息，则先获取微信中的用户信息再创建用户
                       * 2.如果允许获取微信中的用户信息，再次进入小程序时，不会再弹框，直接进入else
                       */
                      if (!res.authSetting['scope.userInfo']) {
                        // 已经授权，可以直接调用 getUserInfo 获取头像昵称，不会弹框
                        wx.getUserInfo({
                          success: function (res) {
                            let resInfo = res;
                            wx.showLoading();
                            // 可以将 res 发送给后台解码出 unionId
                            /**
                             * 1.创建用户
                             * 2.获取用户资料
                             */
                            wx.request({
                              url: api.addUser,
                              data: { openId: that.globalData.openId, gender: res.userInfo.gender, nickName: res.userInfo.nickName, avatarUrl: res.userInfo.avatarUrl },
                              method: 'POST',
                              success: function (res) {
                                //获取用户资料
                                wx.request({
                                  url: api.getUserInfo,
                                  data: { openId: that.globalData.openId },
                                  method: 'POST',
                                  success: function (res) {
                                    wx.hideLoading();
                                    console.log(res.data.data)
                                    if (res.data.data) {
                                      that.globalData.userInfo = res.data.data;
                                      // 将用户资料加入回调
                                      if (that.userInfoCallback) {
                                        that.userInfoCallback(res.data.data)
                                      }
                                    }
                                  }
                                })
                              }
                            })
                          },
                          fail: function (res) {
                            console.log('获取用户信息权限未开启');
                          }
                        })
                      } else {
                        //获取用户资料
                        wx.request({
                          url: api.getUserInfo,
                          data: { openId: that.globalData.openId },
                          method: 'POST',
                          success: function (res) {
                            wx.hideLoading();
                            console.log(res.data.data)
                            if (res.data.data) {
                              that.globalData.userInfo = res.data.data;
                              // 将用户资料加入回调
                              if (that.userInfoCallback) {
                                that.userInfoCallback(res.data.data)
                              }
                            } 
                          }
                        })
                      }
                    }
                  })
                }
              })
            }
          })
        }
      },
    })
  },
  // 公共变量
  globalData: {
    appId: null,
    businessAppId: null,
    userInfo: null,
    openId: null,
    timeStamp: 0
  },
  NetWorkUtils,
  Api,
  Utils,
  Constants,
  Storage: Storage
})

